home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / doc / geomview-4 < prev    next >
Text File  |  1993-12-06  |  50KB  |  1,235 lines

  1. Info file: geomview,    -*-Text-*-
  2. produced by texinfo-format-buffer
  3. from file: geomview.tex
  4.  
  5.  
  6. 
  7. File: geomview  Node: Module Installation, Prev: Example3, Up: Modules, Next: Private Module Installation
  8.  
  9. Module Installation
  10. ===================
  11.  
  12. This section tells how to install an external module so you can invoke
  13. it within Geomview.  There are two ways to install a module: you can
  14. install a *private* module so that the module is available to you
  15. whenever you run Geomview, or you can install a *system* module
  16. so that the module is available to all users on your system whenever they
  17. run Geomview.
  18.  
  19. * Menu:
  20.  
  21. * Private Module Installation::.
  22. * System Module Installation::.
  23.  
  24.  
  25. 
  26. File: geomview  Node: Private Module Installation, Prev: Module Installation, Up: Module Installation, Next: System Module Installation
  27.  
  28. Private Module Installation
  29. ---------------------------
  30.  
  31. The `emodule-define' command arranges for a module to appear in
  32. Geomview's *Modules* browser.  `emodule-define' takes two
  33. string arguments; the first is the name that will appear in the
  34. *Modules* browser.  The second is the shell command for running
  35. the module; it may include arguments.  Geomview executes this command in
  36. a subshell when you click on the module's entry in the browser.  For
  37. example
  38.  
  39.      (emodule-define "Foo" "/u/home/modules/foo -x")
  40.  
  41. adds a line labeled "Foo" to the *Modules* browser which
  42. causes the command "/u/home/modules/foo -x" to be executed when selected.
  43.  
  44. You may put `emodule-define' commands in your `~/.geomview'
  45. file to arrange for certain modules to be available every time you run
  46. Geomview; *Note Customization::.  You can also execute
  47. `emodule-define' commands from the *Commands* panel if you
  48. want to add a module to an already running copy of Geomview.
  49.  
  50. There are several other gcl commands for controlling the entries
  51. in the *Modules* browser; for details, *Note GCL::.
  52.  
  53. 
  54. File: geomview  Node: System Module Installation, Prev: Private Module Installation, Up: Module Installation, Next: GCL
  55.  
  56. System Module Installation
  57. --------------------------
  58.  
  59. To install a module so that it is available to all Geomview users do
  60. the following
  61.  
  62.  
  63. 1
  64.      Create a file called `.geomview-MODULE' where
  65.      `MODULE' is the name of the module.  This file should contain
  66.      a single line which is an `emodule-define' command for that module:
  67.           (emodule-define "New Module" "newmodule")
  68.      The first argument, `"New Module"' above, is the string that will
  69.      appear in the *Modules* browser.  The second string,
  70.      `"newmodule"' above, is the shell command for invoking the module.
  71.      It may include arguments, and you may assume that the module is on the
  72.      $path searched by the shell.
  73.  
  74. 2
  75.      Put a copy of the `.geomview-MODULE' and the module
  76.      executable itself in Geomview's `modules/sgi' directory.  This is a
  77.      subdirectory of the Geomview distribution directory (on the Geometry
  78.      Center's system the pathname is `/u/gcg/ngrap/modules/sgi'.
  79.  
  80.  
  81. After these steps, the new module should appear, in alphabetical
  82. position, in the *Modules* browser of Geomview's *Main*
  83. panel next time Geomview is run.  The reason this works is that when
  84. Geomview is invoked it processes all the `.geomview-*' files in its
  85. `modules' directory.  It also remembers the pathname of this
  86. directory and prepends that path to the $path of the shell in which it
  87. invokes such a module.
  88.  
  89. 
  90. File: geomview  Node: GCL, Prev: System Module Installation, Up: Top, Next: Argument Conventions
  91.  
  92. gcl: the Geomview Command Language
  93. **********************************
  94.  
  95. Gcl has the syntax of lisp -- i.e. an expression of the form (f a b
  96. ...) means pass the values of a, b, ... to the function f.
  97. Gcl is very limited and is by no means an implementation of lisp.  It
  98. is simply a language for expressing commands to be executed in the order
  99. given, rather than a programming language.  It does not support variable
  100. or function definition.
  101.  
  102. Gcl is the language that Geomview understands for files that it loads
  103. as well as for communication with other programs.  If you want to
  104. execute a gcl command interactively, you can bring up the
  105. *Command* panel which lets you type in a command; Geomview
  106. executes the command when you hit the return key.  Output from such
  107. commands is printed to standard output.  Alternately, you can invoke
  108. Geomview as `geomview -c -' which causes it to read gcl commands
  109. from standard input.
  110.  
  111. Gcl functions return a value, and you can nest function calls in ways
  112. which use this returned value.  For example
  113.      (f (g a b))
  114. evaluates `(g a b)' and then evaluates `(f x)' where `x'
  115. is the result returned by `(g a b)'.  Geomview maintains these
  116. return values internally but does not normally print them out.  If you
  117. want to print out a return value pass it to the `echo' function.
  118. For example the `geomview-version' function returns a string
  119. representing the version of Geomview that is running, and
  120.      (echo (geomview-version))
  121. prints out this string.
  122.  
  123. Many functions simply return `t' for success or `nil' for
  124. failure; this is the case if the documentation for the function does not
  125. indicate otherwise.  These are the lisp symbols for true and false,
  126. respectively.  (They correspond to the C variables `Lt' and
  127. `Lnil' which you are likely to see if you look at the source code
  128. for Geomview or some of the external modules.)
  129.  
  130. In the descriptions of the commands below several references are made to
  131. "OOGL" formats.  OOGL is the data description language that Geomview
  132. uses for describing geometry, cameras, appearances, and other basic
  133. objects.  For details of the OOGL formats, *Note OOGL File Formats::.
  134. (Or eqivalently, see the oogl(5) manual page, distributed with Geomview
  135. in the file man/cat5/oogl.5.
  136.  
  137. The gcl commands and argument types are listed below.  Most
  138. of the documentation in this section of the manual is available within
  139. Geomview via the `?' and `??' commands.  The command `(?
  140. COMMAND)' causes Geomview to print out a one-line summary of the
  141. syntax of COMMAND, and `(?? COMMAND)' prints out an
  142. explanation of what COMMAND does.  You can include the wild-card
  143. character `*' in COMMAND to print information for a group of
  144. commands matching a pattern.  For example, `(?? *emodule*)' will
  145. print all information about all commands containing the string
  146. `emodule'.  `(? *)' will print a short list of all commands.
  147.  
  148. * Menu:
  149.  
  150. * Argument Conventions::  Conventions used in describing argument types.
  151. * Gcl Reference::      Documentation for each gcl command.
  152.  
  153. 
  154. File: geomview  Node: Argument Conventions, Prev: GCL, Up: GCL, Next: Gcl Reference
  155.  
  156. Conventions Used In Describing Argument Types
  157. =============================================
  158.  
  159. The following symbols are used to describe argument types
  160. in the documentation for gcl functions.
  161.  
  162.  
  163. `APPEARANCE'
  164.      is an OOGL appearance specification.
  165.  
  166. `CAM-ID'
  167.      is an ID that refers to a camera.
  168.  
  169. `CAMERA'
  170.      is an OOGL camera specification.
  171.  
  172. `GEOM-ID'
  173.      is an ID that refers to a geometry.
  174.  
  175. `GEOMETRY'
  176.      is an OOGL geometry specification.
  177.  
  178. `ID'
  179.      is a string which names a geometry or camera.  Besides
  180.      those you create, valid ones are:
  181.  
  182.  
  183.      ``World, world, worldgeom, g0''
  184.           the collection of all geom's
  185.  
  186.      `target'
  187.           selected target object (cam or geom)
  188.  
  189.      `center'
  190.           selected center-of-motion object
  191.  
  192.      `targetcam'
  193.           last selected target camera
  194.  
  195.      `targetgeom'
  196.           last selected target geom
  197.  
  198.      `focus'
  199.           camera where cursor is (or most recently was)
  200.  
  201.      `allgeoms'
  202.           all geom objects
  203.  
  204.      `allcams'
  205.           all cameras
  206.  
  207.      ``default, defaultcam, prototype''
  208.           future cameras inherit default's settings
  209.  
  210.  
  211.      The following IDs are used to name coordinate systems,
  212.      e.g. in `pick' and `write' commands:
  213.  
  214.  
  215.      ``World, world, worldgeom, g0''
  216.           the world, within which all other geoms live.
  217.  
  218.      `universe '
  219.           the universe, in which the World, lights and cameras live.  Cameras'
  220.           world2cam transforms might better be called universe2cam, etc.
  221.  
  222.      `self'
  223.           "this Geomview object".  Transform from an object to `self' is the
  224.           identity; writing its geometry gives the object itself with no
  225.           enclosing transform; picked points appear in the object's coordinates.
  226.  
  227.      `primitive'
  228.           (for `pick' only) Picked points appear in the coordinate system of the
  229.           lowest-level OOGL primitive.
  230.  
  231.  
  232.      A name is also an acceptable id.  Given names are made unique by
  233.      appending numbers if necessary (i.e. "foo<2>"). Every geom is also
  234.      named g[n] and every camera is also named c[n] ("g0" is always the
  235.      worldgeom): this name is used as a prefix to keyboard commands and can
  236.      also be used as a gcl id.  Numbers are reused after an
  237.      object is deleted. Both names are shown in the Object browser.
  238.  
  239. `STATEMENT'
  240.      represents a function call.  Function calls have the form `(func arg1
  241.      arg2 ... )', where `func' is the name of the function and `arg1',
  242.      `arg2', ... are the arguments.
  243.  
  244. `TRANSFORM'
  245.      is an OOGL 4x4 transformation matrix.
  246.  
  247. `WINDOW'
  248.      is an OOGL winddow specification.
  249.  
  250.  
  251. 
  252. File: geomview  Node: Gcl Reference, Prev: Argument Conventions, Up: GCL, Next: Non-Euclidean Geometry
  253.  
  254. Gcl Reference Guide
  255. ===================
  256.  
  257.  
  258. `!'
  259.      `!' is a synonym for `shell'
  260.  
  261. `?'
  262.      `?' is a synonym for `help'
  263.  
  264. `??'
  265.      `??' is a synonym for `morehelp'
  266.  
  267. `|'
  268.      `|' is a synonym for `emodule-run'
  269.  
  270. `(< EXPR1 EXPR2)'
  271.      Returns t if EXPR1 is less than EXPR2.  EXPR1 and
  272.      EXPR2 should be either both integers or floats, or both strings.
  273.  
  274. `(= EXPR1 EXPR2)'
  275.      Returns t if EXPR1 is equal to EXPR2.  EXPR1 and
  276.      EXPR2 should be either both integers or floats, or both strings.
  277.  
  278. `(> EXPR1 EXPR2)'
  279.      Returns t if EXPR1 is greater than EXPR2.  EXPR1 and
  280.      EXPR2 should be either both integers or floats, or both strings.
  281.  
  282. `(all geometry)'
  283.      returns a list of names of all geometry objects.
  284.      Use e.g. "(echo (all geometry))" to print such a list.
  285.  
  286. `(all camera)'
  287.      returns a list of names of all cameras.
  288.  
  289. `(all emodule defined)'
  290.      returns a list of all defined external modules.
  291.  
  292. `(all emodule running)'
  293.      returns a list of all running external modules.
  294.  
  295. `(ap-override [on|off])'
  296.      Selects whether appearance controls should override objects' own
  297.      settings.  On by default.  With no arguments, returns current setting.
  298.  
  299.  
  300. `(backcolor      CAM-ID R G B)'
  301.      Set the background color of CAM-ID; R G B are
  302.      numbers between 0 and 1.
  303.  
  304. `(bbox-color     GEOM-ID R G B)'
  305.      Set the bounding-box color of GEOM-ID; R G B are
  306.      between 0 and 1.
  307.  
  308. `(bbox-draw      GEOM-ID [yes|no])'
  309.      Say whether GEOM-ID's bounding-box should be drawn; `yes' if
  310.      omitted.
  311.  
  312. `(camera         CAM-ID [CAMERA])'
  313.      Specify data for CAM-ID; CAMERA is a string giving an OOGL
  314.      camera specification.  If no camera CAM-ID exists,
  315.      it is created; in this case, the second argument is optional,
  316.      and if omitted, a default camera is used.  See also: new-camera.
  317.  
  318. `(camera-draw    CAM-ID [yes|no])'
  319.      Say whether or not cameras should be drawn in CAM-ID; `yes'
  320.      if omitted.
  321.  
  322. `(camera-prop { GEOMETRY }   [projective])'
  323.      Specify the object to be shown when drawing other cameras.  By default,
  324.      this object is drawn with its origin at the camera, and with the camera
  325.      looking toward the object's -Z axis.  With the "projective" keyword, the
  326.      camera's viewing projection is also applied to the object; this places
  327.      the object's Z=-1 and Z=+1 at near and far clipping planes, with the
  328.      viewing area -1<={X,Y}<=+1.  Example: (camera-prop { < cube }
  329.      projective)
  330.  
  331. `(camera-reset   CAM-ID)'
  332.      Reset CAM-ID to its default value.
  333.  
  334. `(car LIST)'
  335.      returns the first element of LIST.
  336.  
  337. `(cdr LIST)'
  338.      returns the list obtained by removing the first element of LIST.
  339.  
  340. `(clock)'
  341.      Returns the current time, in seconds, as shown by this stream's clock.
  342.      See also set-clock and sleep-until.
  343.  
  344. `(command        INFILE [OUTFILE])'
  345.      Read commands from INFILE; send corresponding responses
  346.      (e.g. anything written to filename `-') to OUTFILE, stdout
  347.      by default.
  348.  
  349. `(copy [ID] [name])'
  350.      Copies an object or camera.  If ID is not specified, it 
  351.      is assumed to be targetgeom.  If name is not specified, it 
  352.      is assumed to be the same as the name of ID.
  353.  
  354. `(cull-backface [on|off])'
  355.      Select whether back-facing polygons should be displayed.
  356.      Initially on: all polygons are displayed.  When off, polygons whose
  357.      vertices are arranged clockwise on the screen are hidden.  Useful for
  358.      simulating two-sided surface coloring.
  359.  
  360. `(cursor CAM-ID  {on|off} [pbmfile xorigin yorigin])'
  361.      Turns the given window's graphics cursor on or off.
  362.      Optionally sets the 16x16 pixel cursor glyph from the given file,
  363.      which must be in binary (P4) PBM format.  Can only be applied to
  364.      actual windows, not e.g. `allcams' or `default'.  Sorry.
  365.  
  366. `(cursor-still [INT])'
  367.      Sets the number of microseconds for which the cursor must not
  368.      move to register as holding still.  If INT is not specified,
  369.      the value will be reset to the default.
  370.  
  371. `(cursor-twitch [INT])'
  372.      Sets the distance which the cursor must not move (in x or
  373.      y) to register as holding still.  If INT is not specified,
  374.      the value will be reset to the default.
  375.  
  376. `(delete         ID)'
  377.      Delete object or camera ID.
  378.  
  379. `(dimension [N])'
  380.      Sets or reads the space dimension for N-dimensional viewing.
  381.      (Since calculations are done using homogeneous coordinates, this means
  382.      matrices are (N+1)x(N+1).)  With no arguments, returns the
  383.      current dimension, or 0 if N-dimensional viewing has not been
  384.      enabled.
  385.  
  386. `(dice           GEOM-ID N)'
  387.      Dice any Bezier patches within GEOM-ID into NxN meshes; default 10.
  388.  
  389. `(draw           CAM-ID)'
  390.      Draw the view in CAM-ID, if it needs redrawing.  See also `redraw'.
  391.  
  392. `(echo          ...)'
  393.      Write the given data to the special file `-'.  Strings are written
  394.      literally; lisp expressions are evaluated and their values written.
  395.      If received from an external program, `echo' sends to the program's
  396.      input.  Otherwise writes to Geomview's own standard output
  397.      (typically the terminal).
  398.  
  399. `(emodule-clear)'
  400.      Clears the Geomview application (external module) browser.
  401.  
  402. `(emodule-define  NAME  SHELL-COMMAND ...)'
  403.      Define an external module called NAME, which then appears in the
  404.      external-module browser.  The SHELL-COMMAND string
  405.      is a UNIX shell command which invokes the module.
  406.      See emodule-run for discussion of external modules.
  407.  
  408. `(emodule-defined MODULENAME)'
  409.      If an external module named MODULENAME is known, returns the name
  410.      of the program invoked when it's run as a quoted string; otherwise
  411.      returns `nil'.  `(echo (emodule-defined MODULENAME))' prints
  412.      the string.
  413.  
  414. `(emodule-isrunning NAME)'
  415.      Returns Lt if the emodule NAME is running, or Lnil if it is not running.
  416.      NAME is searched for in the names as they appear in the browser and in
  417.      the shell commands used to execute the external modules (not including
  418.      arguements).
  419.  
  420. `(emodule-path)'
  421.      Returns the current search path for external modules.
  422.      Note: to actually see the value returned by this function
  423.      you should wrap it in a call to echo: (echo (emodule-path)).
  424.      See also set-emodule-path.
  425.  
  426. `(emodule-run  SHELL-COMMAND ARGS ...)'
  427.      Runs the given SHELL-COMMAND (a string containing a UNIX shell
  428.      command) as an external module.  The module's standard output
  429.      is taken as gcl commands; responses (written to filename
  430.      `-' are sent to the module's standard input.  The shell
  431.      command is interpreted by /bin/sh, so e.g. I/O redirection may
  432.      be used; a program which prompts the user for input from the
  433.      terminal could be run with:
  434.      `(emodule-run  yourprogram  <&2)'.
  435.      If not already set, the environment variable $MACHTYPE is set
  436.      to the name of the machine type.  Input and output
  437.      connections to Geomview are dropped when the shell command
  438.      terminates.  Clicking on a running program's module-browser entry
  439.      sends the signal SIGHUP to the program.  For this to work, programs
  440.      should avoid running in the background; those using FORMS or GL
  441.      should call foreground() before the first FORMS or winopen() call.
  442.      See also emodule-define, emodule-start.
  443.  
  444. `(emodule-sort)'
  445.      Sorts the modules in the *Modules* browser alphabetically.
  446.  
  447. `(emodule-start  NAME)'
  448.      Starts the external module NAME, defined by emodule-define.
  449.      Equivalent to clicking on the corresponding module-browser entry.
  450.  
  451. `(emodule-transmit NAME LIST)'
  452.      Places LIST into external module NAME's standard input.  NAME is
  453.      searched for in the names of the modules as they appear in the
  454.      External Modules browser and then in the shell commands used to
  455.      execute the external modules.  Does nothing if modname is not
  456.      running.
  457.  
  458. `(escale GEOM-ID FACTOR)'
  459.      Same as scale but multiplies by exp(scale).  Obsolete.
  460.  
  461. `(event-mode MODESTRING)'
  462.      Set the mouse event (motion) mode; MODESTRING should be one of
  463.      the strings that appears in the motion mode browser (including
  464.      the keyboard shortcut, e.g. "[r] Rotate").
  465.  
  466. `(evert GEOM-ID [yes|no])'
  467.      Set the normal eversion state of GEOM-ID.  If the second argument
  468.      is omitted, toggle the eversion state.
  469.  
  470. `(exit)'
  471.      Terminates Geomview.
  472.  
  473. `(ezoom GEOM-ID FACTOR)'
  474.      Same as zoom but multiplies by exp(zoom).  Obsolete.
  475.  
  476. `(freeze CAM-ID)'
  477.      Freeze CAM-ID; drawing in this camera's window is turned off
  478.      until it is explicitly redrawn with `(redraw CAM-ID)', after
  479.      which time drawing resumes as normal.
  480.  
  481. `(geometry GEOM-ID [GEOMETRY])'
  482.      Specify the geometry for GEOM-ID.  GEOMETRY is a string
  483.      giving an OOGL geometry specification.  If no object
  484.      called GEOM-ID exists, it is created; in this case the
  485.      GEOMETRY argument is optional, and if omitted, the new
  486.      object GEOM-ID is given an empty geometry.
  487.  
  488. `(geomview-version)'
  489.      Returns a string representing the version of Geomview that is
  490.      running.
  491.  
  492. `(hdefine geometry|camera|transform|window NAME VALUE)'
  493.      Sets the value of a handle of a given type.  (hdefine TYPE
  494.      NAME VALUE) is generally equivalent to `(read
  495.      TYPE { define NAME VALUE })' except that the
  496.      assignment is done when hdefine is executed, (possibly not at all if
  497.      inside a conditional statement), while `(read ... define ...)'
  498.      performs assignment as soon as the text is read.
  499.  
  500. `(help  [command])'
  501.      Command may include "*"s as wildcards; see also `morehelp'.
  502.      One-line command help; lists names only if multiple commands match.
  503.      `?' is a synonym for `help'.
  504.  
  505. `(hmodel CAM-ID {virtual|projective|conformal})'
  506.      Set the model used to display geometry in
  507.      this camera; see also `space'.
  508.  
  509. `(hsphere-draw   CAM-ID [yes|no])'
  510.      Say whether to draw the sphere at infinity in hyperbolic space.
  511.      If the second argument is omitted, `yes' is assumed.
  512.  
  513. `(if TEST EXPR1 [EXPR2])'
  514.      Evaluates TEST; if TEST returns a non-nil value, returns the
  515.      value of EXPR1.  If TEST returns nil, returns the value of
  516.      EXPR2 if EXPR2 is present, otherwise returns nil.
  517.  
  518. `(inhibit-warning STRING)'
  519.      Inhibit warning inhbits Geomview from displaying a
  520.      particular warning message determined by STRING.
  521.      At present there are no warning messages that this
  522.      applies to, so this command is rather useless.
  523.  
  524. `(interest (COMMAND [ARGS]))'
  525.      Allows you to express interest in a command.  When Geomview
  526.      executes that command in the future it will echo it to the
  527.      communication pool from which the interest command came.
  528.      COMMAND can be any command.  Args specify restrictions on the
  529.      values of the arguments; if ARGS are present in the interest
  530.      command, Geomview will only echo calls to the command in which
  531.      the arguments match those given in the interest command.  Two
  532.      special argument values may appear in the argument list.  `*'
  533.      matches any value. `nil' matches any value but supresses the
  534.      reporting of that value; its value is reported as `nil'.
  535.  
  536.      The purpose of the interest command is to allow external
  537.      modules to find out about things happening inside Geomview.
  538.      For example, a module interested in knowing when a geom called
  539.      "foo" is deleted could say `(interest (delete foo))' and would
  540.      receive the string `(delete foo)' when foo is deleted.
  541.  
  542.      Picking is a special case of this.  For most modules
  543.      interested in pick events the command `(interest (pick
  544.      world))' is sufficient.  This causes Geomview to send a string
  545.      of the form `(pick world ...)' every time a pick event (right
  546.      mouse double click).  See the `pick' command for details.
  547.  
  548. `(lines-closer   CAM-ID DIST)'
  549.      Draw lines (including edges) closer to the camera than polygons
  550.      by DIST / 10^5  of the Z-buffer range.  DIST = 3.0 by default.
  551.      If DIST is too small, a line lying on a surface may be
  552.      dotted or invisible, depending on the viewpoint.
  553.      If DIST is too large, lines may appear in front of surfaces
  554.      that they actually lie behind.  Good values for DIST vary with
  555.      the scene, viewpoint, and distance between near and far clipping
  556.      planes.  This feature is a kludge, but can be helpful.
  557.  
  558. `(load  filename  [command|geometry|camera])'
  559.      Loads the given file into Geomview.  The optional second argument
  560.      specifies the type of data it contains, which may be `command'
  561.      (gcl commands), `geometry' (OOGL geometric data), or
  562.      `camera' (OOGL camera definition).  If omitted, attempts to guess
  563.      about the file's contents.  Loading geometric data creates a new visible
  564.      object; loading a camera opens a new window; loading a gcl file
  565.      executes the commands in the file.
  566.  
  567. `(load-path)'
  568.      Returns the current search path for command, geometry, etc. files.
  569.      Note: to actually see the value returned by this function
  570.      you should wrap it in a call to echo: (echo (load-path)).
  571.      See also set-load-path.
  572.  
  573. `(look [GEOM-ID] [CAM-ID])'
  574.      Rotates the named camera to point toward the center of the 
  575.      bounding box of the named object (or the origin in hyperbolic or 
  576.      sphereical space).  In Euclidean space, moves the camera 
  577.      forward or backward until the object appears as large 
  578.      as possible while still being entirely visible.  Equivalent to 
  579.           progn ( 
  580.             (look-toward [GEOM-ID] [CAM-ID] {center | origin})
  581.             [(look-encompass [GEOM-ID] [CAM-ID])] 
  582.           )
  583.      If GEOM-ID is not specified, it is assumed to be World.  If 
  584.      CAM-ID is not specified, it is assumed to be targetcam.
  585.  
  586. `(look-encompass [GEOM-ID] [CAM-ID])'
  587.      Moves CAM-ID backwards or forwards until its field of view
  588.      surrounds GEOM-ID. This routine works only in Euclidean space.  
  589.      If GEOM-ID is not specified, it is assumed to be the world.  
  590.      If CAM-ID is not specified, it is assumed to be the targetcam.  
  591.      See also (look-encompass-size).
  592.  
  593. `(look-encompass-size [VIEW-FRACTION  CLIP-RATIO  NEAR-MARGIN FAR-MARGIN])'
  594.      Sets/returns parameters used by (look-encompass).
  595.      VIEW-FRACTION is the portion of the camera window filled by the
  596.      object, CLIP-RATIO is the max allowed ratio of near-to-far
  597.      clipping planes.  The near clipping plane is 1/NEAR-MARGIN times
  598.      closer than the near edge of the object, and the far clipping plane is
  599.      FAR-MARGIN times further away.  Returns the list of current
  600.      values.  Defaults: .75 100 0.1 4.0
  601.  
  602. `(look-recenter [GEOM-ID] [CAM-ID])'
  603.      Translates and rotates the camera so that it is looking in the 
  604.      -z direction (in GEOM-ID's coordinate system) at the center of 
  605.      GEOM-ID's bounding box (or the origin of the coordinate system 
  606.      in non-Eudlidean space).  In Euclidean space, the camera is also 
  607.      moved as close as possible to the object while allowing the 
  608.      entire object to be visible.  Also makes sure that the y-axes of 
  609.      GEOM-ID and CAM-ID are parallel.
  610.  
  611. `(look-toward [GEOM-ID] [CAM-ID] [origin | center])'
  612.      Rotates the named camera to point toward the origin of the
  613.      object's coordinate system, or the center of the object's
  614.      bounding box (in non-Euclidean space, the origin will be used 
  615.      automatically).  Default GEOM-ID is the world, default camera
  616.      is targetcam, default location to point towards is the center
  617.      of the bounding box.
  618.  
  619. `(merge {window|camera} CAM-ID  { WINDOW or CAMERA ... } )'
  620.      Modify the given window or camera, changing just those properties
  621.      specified in the last argument.  E.g.
  622.      `(merge camera "Camera" { far 20 })'
  623.      sets Camera's far clipping plane to 20 while leaving
  624.      other attributes untouched.
  625.  
  626. `(merge-ap GEOM-ID APPEARANCE)'
  627.      Merge in some appearance characteristics to GEOM-ID.
  628.      Appearance parameters include surface and line color, shading
  629.      style, line width, and lighting.
  630.  
  631. `merge-base-ap'
  632.      is a synonym for merge-baseap.
  633.  
  634. `(merge-baseap APPEARANCE)'
  635.      Merge in some appearance characteristics to the base default
  636.      appearance (applied to every geom before its own apperance).
  637.      Lighting is typically included in the base appearance.
  638.  
  639. `(morehelp COMMAND)'
  640.      COMMAND may include "*" wildcards. Prints more info than
  641.      `(help COMMAND)'. `??' is a synonym for `morehelp'
  642.  
  643. `(name-object ID NAME)'
  644.      Assign a new NAME (a string) to ID.  A number is appended if
  645.      that name is in use (for example, "foo" -> "foo<2>").  The new
  646.      name, possibly with number appended, may be used as object's
  647.      id thereafter.
  648.  
  649. `(new-alien name [GEOMETRY])'
  650.      Create a new alien (geom not in the world) with the given name
  651.      (a string).  GEOMETRY is a string giving an OOGL geometry
  652.      specification.  If GEOMETRY is omitted, the new alien
  653.      is given an empty geometry.  If an object with that name
  654.      already exists, the new alien is given a unique name.  The
  655.      light beams that are used to move around the lights are an
  656.      example of aliens. They're drawn but are not controllable the
  657.      way ordinary objects are: they don't appear in the object
  658.      browser and the user can't move them with the normal motion
  659.      modes.
  660.  
  661. `(new-camera name [CAMERA])'
  662.      Create a new camera with the given name (a string).  If a
  663.      camera with that name already exists, the new object is given
  664.      a unique name.  If CAMERA is omitted a default camera is used.
  665.  
  666. `(new-center [id])'
  667.      Stop id, then set id's transform to the identity.  Default id 
  668.      is target.  Also, if the id is a camera, calls 
  669.      (look-recenter World id).  The main function of the call to 
  670.      (look-recenter) is to place the camera so that it is pointing 
  671.      parallel to the z axis toward the center of the world.
  672.  
  673. `(new-geometry name [GEOMETRY])'
  674.      Create a new geom with the given name (a string).  GEOMETRY is
  675.      a string giving an OOGL geometry specification.  If
  676.      GEOMETRY is omitted, the new object is given an empty geometry.
  677.      If an object with that name already exists, the new object is
  678.      given a unique name.
  679.  
  680. `(new-reset)'
  681.      Equivalent to (progn (new-center ALLGEOMS)(new-center ALLCAMS))
  682.  
  683. `(ND-axes CAM-ID [CLUSTERNAME [Xindex Yindex Zindex]])'
  684.      Sets or reads the set of axes in the space of the N-dimensional virtual
  685.      camera CLUSTERNAME which determine the 3-D subspace seen by camera
  686.      CAM-ID.  Axes are specified by their indices, from 0 to N-1 for an
  687.      N-dimensional space.
  688.  
  689. `(ND-color CAM-ID [ (((x0 x1 x2 ... xn) v r g b a   v r g b a  ... )'
  690.          ((x0 ... xn)  v r g b a  v r g b a ...) ...)] )
  691.  
  692. `(ND-xform GEOM-ID [NTRANSFORM { IDIM ODIM ... }])'
  693.      Sets or returns the N-D transform of the given GEOM.
  694.  
  695. `(NeXT)'
  696.      Returns t if running on a NeXT, nil if not
  697.  
  698. `(normalization  GEOM-ID {each|none|all|keep})'
  699.      Set the normalization status of GEOM-ID.
  700.      `none'
  701.           suppresses all normalization.
  702.  
  703.      `each'
  704.           normalizes the object's bounding box to fit into the unit
  705.           sphere, with the center of its bounding box translated
  706.           to the origin.  The box is scaled such that its long diagonal,
  707.           sqrt((xmax-xmin)^2 + (ymax-ymin)^2 + (zmax-zmin)^2), is 2.
  708.  
  709.      `all'
  710.           resembles `each', except when an object is changing
  711.           (e.g. when its geometry is being changed by an external program).
  712.           Then, `each' tightly fits the bounding box around the
  713.           object whenever it changes and normalizes accordingly,
  714.           while `all' normalizes the union of all variants of the object
  715.           and normalizes accordingly.
  716.  
  717.      `keep'
  718.           leaves the current normalization transform unchanged
  719.           when the object changes.
  720.  
  721.  
  722.      It may be useful to apply `each' or `all' normalization apply to the
  723.      first version of a changing object to bring it in view, then switch to
  724.      `keep'.
  725.  
  726. `(pick COORDSYS GEOMID G V E F P VI EI FI)'
  727.      The pick command is executed internally in response to pick
  728.      events (right mouse double click).
  729.  
  730.      `COORDSYS'
  731.           coordinate system in which coordinates of the following
  732.           arguments are specified.   This can be:
  733.  
  734.           `world'
  735.                world coord sys
  736.  
  737.           `self'
  738.                coord sys of the picked geom (GEOMID)
  739.  
  740.           `primitive'
  741.  
  742.                coord sys of the actual primitive within the picked geom where
  743.                the pick occurred.
  744.  
  745.  
  746.      `GEOMID'
  747.           id of picked geom
  748.  
  749.      `G'
  750.           picked point (actual intersection of pick ray with object)
  751.  
  752.      `V'
  753.           picked vertex, if any
  754.  
  755.      `E'
  756.           picked edge, if any
  757.  
  758.      `F'
  759.           picked face
  760.  
  761.      `P'
  762.           path to picked primitive [0 or more]
  763.  
  764.      `VI'
  765.           index of picked vertex in primitive
  766.  
  767.      `EI'
  768.           list of indices of endpoints of picked edge, if any
  769.  
  770.      `FI'
  771.           index of picked face
  772.  
  773.  
  774.      External modules can find out about pick events by registering
  775.      interest in calls to `pick' via the `interest' command.
  776.  
  777. `(pickable       GEOM-ID {yes|no})'
  778.      Say whether or not GEOM-ID is included in the pool of objects
  779.      that could be returned from the pick command.
  780.  
  781. `(position       objectID otherID)'
  782.      Set the transform of objectID to that of otherID.
  783.  
  784. `(position-at    objectID otherID [center | origin])'
  785.      Translate objectID to the center of the bounding box or the 
  786.      origin of the coordinate system of otherID (parallel translation).
  787.      Default is center.
  788.  
  789. `(position-toward objectID otherID [center | origin])'
  790.      Rotate objectID so that the center of the bounding box
  791.      or the origin of the coordinate system of the otherID
  792.      lies on the positive z-axis of the first object.  Default is
  793.      the center of the bounding box.
  794.  
  795. `(progn STATEMENT [ ... ])'
  796.      evaluates each STATEMENT in order and returns the value of the
  797.      last one.  Use progn to group a collection of commands together,
  798.      forcing them to be treated as a single command.
  799.  
  800. `quit'
  801.      is a synonym for `exit'.
  802.  
  803. `(quote EXPR)'
  804.      returns the symbolic lisp expression EXPR without evaluating it.
  805.  
  806. `(rawevent       dev val x y t)'
  807.      Enter the specified raw event into the event queue.  The
  808.      arguments directly specify the members of the event structure
  809.      used internally by Geomview.  This is the lowest level event
  810.      handler and is not intended for general use.
  811.  
  812. `(rawpick CAM-ID X Y)'
  813.      Process a pick event in camera CAM-ID at location (X,Y) given in
  814.      integer pixel coordinates.  This is a low-level procedure not
  815.      intended for external use.
  816.  
  817. `(read {geometry|camera|transform|command} {GEOMETRY or CAMERA or ...})'
  818.      Read and interpret the text in ... as containing the
  819.      given type of data.  Useful for defining objects using OOGL
  820.      reference syntax, e.g.
  821.           (geometry  thing { INST  transform : T    geom : fred })
  822.           (read  geometry  { define fred QUAD 1 0 0  0 1 0  0 0 1  1 0 0 })
  823.           (read  transform { define T <myfile})
  824.  
  825. `(real-id ID)'
  826.      Returns a string canonically identifying the given ID,
  827.      or `nil' if the object does not exist.  Examples:
  828.           (if (real-id fred) (delete fred))
  829.      deletes "fred" if it exists but reports no error if it doesn't, and
  830.           (if (= (real-id targetgeom) (real-id World)) () (delete targetgeom))
  831.      deletes "targetgeom" if it is different from the World.
  832.  
  833. `(redraw         CAM-ID)'
  834.      States that the view in CAM-ID should be redrawn on the
  835.      next pass through the main loop or the next invocation of `draw'.
  836.  
  837. `(regtable)'
  838.      shows the internal interest table; for debugging only.
  839.  
  840. `(rehash-emodule-path)'
  841.      Rebuilds the application (external module) browser by reading
  842.      all .geomview-* files in all directories on the emodule-path.
  843.      Primarily intended for internal use; any applications defined
  844.      by (emodule-define ...) commands outside of the .geomview-*
  845.      files on the emodule-path will be lost.  Does not sort the
  846.      entries in the brower; see (emodule-sort) for that.
  847.  
  848. `(replace-geometry GEOM-ID PART-SPECIFICATION GEOMETRY)'
  849.      Replace a part of the geometry for GEOM-ID.
  850.  
  851. `(rib-display    [frame|tiff] FILEPREFIX)'
  852.      Set Renderman display to framebuffer (popup screen window) or a
  853.      TIFF format disk file. FILEPREFIX is used to construct
  854.      names of the form "prefixNNNN.suffix". (i.e. foo0000.rib)
  855.      The number is incremented on every call to `rib-snapshot' and
  856.      reset to 0000 when `rib-display' is called. TIFF files are given
  857.      the same prefix and number as the RIB file (i.e. foo0004.rib
  858.      generates foo0004.tiff). The default FILEPREFIX is "geom" and
  859.      the default format is TIFF. (Note that Geomview just generates a
  860.      RIB file, which must then be rendered.)
  861.  
  862. `(rib-snapshot   CAM-ID [FILENAME])'
  863.      Write Renderman snapshot (in RIB format) of CAM-ID to
  864.      FILENAME.  If no filename specified, see `rib-display' for
  865.      explanation of the filename used.
  866.  
  867. `(scale          GEOM-ID FACTOR [Y-FACTOR Z-FACTOR])'
  868.      Scale GEOM-ID, multiplying its size by FACTOR.  The factors 
  869.      should be positive numbers.  If Y-FACTOR and Z-FACTOR are 
  870.      present and non-zero, the object is scaled by FACTOR in x, by 
  871.      Y-FACTOR in y, and by Z-FACTOR in z.  If only FACTOR is present, 
  872.      the object is scaled by FACTOR in x, y, and z.  Scaling only 
  873.      really makes sense in Euclidean space.  Mouse-driven scaling in 
  874.      other spaces is not allowed;  the scale command may be issued 
  875.      in other spaces but should be used with caution because it may 
  876.      cause the data to extend beyond the limits of the space.
  877.  
  878. `(scene          CAM-ID [GEOMETRY])'
  879.      Make CAM-ID look at GEOMETRY instead of at the universe.
  880.  
  881. `(set-clock TIME)'
  882.      Adjusts the clock for this command stream to read TIME (in seconds)
  883.      as of the moment the command is received.  See also sleep-until, clock.
  884.  
  885. `(set-conformal-refine CMX [N [SHOWEDGES]])'
  886.      Sets the parameters for the refinement algorithm used in drawing
  887.      in the conformal model.  CMX is the cosine of the maximum angle
  888.      an edge can bend before it is refined.  Its value should be between
  889.      -1 and 1; the default is 0.95; decreasing its value will cause less
  890.      refinement.  N is the maximum number of iterations of refining;
  891.      the default is 6.  SHOWEDGES, which should be `no' or `yes',
  892.      determines whether interior edges in the refinement are drawn.
  893.  
  894. `(set-emodule-path      (PATH1 ... PATHN))'
  895.      Sets the search path for external modules.  The PATHi should
  896.      be pathnames of directories containing, for each module, the
  897.      module's executable file and a .geomview-<modulename> file
  898.      which contains an (emodule-define ...) command for that
  899.      module.  This command implicitly calls (rehash-emodule-path)
  900.      to rebuild the application brower from the new path setting.
  901.  
  902. `(set-load-path      (PATH1 ... PATHN))'
  903.      Sets search path for command, geometry, etc. files.  The PATHi
  904.      are strings giving the pathnames of directories
  905.      to be searched.
  906.  
  907. `(set-motionscale X)'
  908.      Set the motion scale factor to X (default value 0.5).  These
  909.      commands scale their motion by an amount which depends on the
  910.      distance from the frame to the center and on the size of the
  911.      frame.  Specifically, they scale by
  912.      dist + scaleof(frame) * motionscale
  913.      where dist is the distance from the center to the frame and
  914.      motionscale is the motion scale factor set by this function.
  915.      Scaleof(frame) measures the size of the frame object.
  916.  
  917. `(setenv  name string)'
  918.      sets the environment variable "name" to the value
  919.      "string"; the name is visible to Geomview (as in pathnames
  920.      containing $name) and to processes it creates, e.g. external
  921.      modules.
  922.  
  923. `(sgi)'
  924.      Returns t if running on an sgi machine, nil if not
  925.  
  926. `(shell         SHELL-COMMAND)'
  927.      Execute the given UNIX SHELL-COMMAND using /bin/sh.  Geomview
  928.      waits for it to complete and will be unresponsive until it does.
  929.  
  930. `(sleep_for  TIME)'
  931.      Suspend reading commands from this stream for TIME seconds.
  932.      Commands already read will still be executed; "sleep-for" inside
  933.      "progn" won't delay execution of the rest of the progn's contents.
  934.  
  935. `(sleep-until TIME)'
  936.      Suspend reading commands from this stream until TIME (in seconds).
  937.      Commands already read will still be executed; "sleep-until" inside
  938.      "progn" won't delay execution of the rest of the progn's contents.
  939.      Time is measured according to this stream's clock, as set by
  940.      "set-clock"; if never set, the first sleep-until sets it to 0
  941.      (so initially (sleep-until TIME) is the same as (sleep-for TIME)).
  942.      Returns the number of seconds until TIME.
  943.  
  944. `(snapshot       CAM-ID     FILENAME)'
  945.      Save a snapshot of CAM-ID in IRIS rgb image format in file FILENAME
  946.      (a string).   The window is popped above all other windows and
  947.      redrawn before taking the snapshot.
  948.  
  949. `(soft-shader  CAM-ID  {on|off|toggle})'
  950.      Select whether to use software or hardware shading in that camera.
  951.  
  952. `(space {euclidean|hyperbolic|spherical})'
  953.      Set the space associated with the world.
  954.  
  955. `(stereowin CAM-ID  [LAYOUT] [GAPSIZE])'
  956.      Configure CAM-ID as a stereo window.  LAYOUT should be one of
  957.      `no'
  958.           entire window is a single pane, stereo disabled
  959.      `horizontal'
  960.           split left/right: left is stereo eye#0, right is #1.
  961.      `vertical'
  962.           split top/bottom: bottom is eye#0, top is #1.
  963.      `colored'
  964.           panes overlap, red is stereo eye#0, cyan is #1.
  965.      A gap of GAPSIZE pixels is left between subwindows; if omitted,
  966.      subwindows are adjacent.  If both LAYOUT and GAPSIZE are
  967.      omitted, e.g.  `(stereowin CAM-ID)', returns current settings as a
  968.      `(stereowin ...)' command list.  This command doesn't set stereo
  969.      projection; use `merge camera' or `camera' to set the stereyes
  970.      transforms, and `merge window' or `window' to set the pixel aspect
  971.      ratio & window position if needed.
  972.  
  973. `(time-interests DELTATIME INITIAL PREFIX [SUFFIX])'
  974.      Indicates that all interest-related messages, when separated by at
  975.      least DELTATIME seconds of real time, should be preceded by
  976.      the string PREFIX and followed by SUFFIX; the first message
  977.      is preceded by INITIAL.  All three are printf format strings,
  978.      whose argument is the current clock time (in seconds) on that stream.
  979.      A DELTATIME of zero timestamps every message.  Typical usages:
  980.           (time-interests .1 "(set-clock %g)" "(sleep-until %g)")
  981.           (time-interests .1 "(set-clock %g)"
  982.           "(sleep-until %g) (progn (set-clock %g)" ")")
  983.           (time-interests .1 "(set-clock %g)"
  984.           "(if (> 0 (sleep-until %g)) (" "))"
  985.  
  986. `(transform      OBJECT-ID CENTER-ID FRAME-ID [rotate|translate|translate-scaled] x y z)'
  987.      Apply a motion (rotation or translation) to object OBJECT-ID; that
  988.      is, construct and concatenate a transformation matrix with
  989.      OBJECT-ID's transform  The 3 ID's involved are the object
  990.      that moves, the center of motion, and the frame of reference
  991.      in which to apply the motion.  The center is easiest understood
  992.      for rotations: if CENTER-ID is the same as OBJECT-ID then it will
  993.      spin around its own axes; otherwise the moving object will orbit
  994.      the center object.  Normally FRAME-ID, in whose coordinate system
  995.      the (mouse) motions are interpreted, is `focus', the current camera.
  996.      Translations can be scaled proportional to the
  997.      distance between the target and the center. Support for
  998.      spherical and hyperbolic as well as Euclidean space is
  999.      built-in: use the "space" command to change spaces.  With type
  1000.      "rotate" x, y, and z are floats specifying angles in radians.
  1001.      For types "translate" and "translate-scaled" x, y, and z are
  1002.      floats specifying distances in the coordinate system of the
  1003.      center object.
  1004.  
  1005. `(transform-incr  OBJECT-ID CENTER-ID FRAME-ID [rotate|translate|translate-scaled] X Y Z [DT])'
  1006.      Apply continuing motion: construct a transformation matrix and
  1007.      concatenate it with the current transform of OBJECT-ID every
  1008.      refresh (sets OBJECT-ID's incremental transform). Same syntax
  1009.      as transform.  If optional DT argument is present,
  1010.      the object is moved at each time step such that its average motion
  1011.      equals one instance of the motion per DT seconds.  E.g.
  1012.      `(transform-incr  World World World  rotate  360 0 0  10.0)'
  1013.      rotates the World about its X axis at 360 degrees every 10 seconds.
  1014.  
  1015. `(transform-set OBJECT-ID CENTER-ID FRAME-ID [rotate|translate|translate-scaled] X Y Z)'
  1016.      Set OBJECTID's transform to the constructed transform.
  1017.      Same syntax as transform.
  1018.  
  1019. `(ui-center      ID)'
  1020.      Set the center for user interface (i.e. mouse) controlled
  1021.      motions to object ID.
  1022.  
  1023. `ui-emotion-program'
  1024.      is an obsolete command.  Use its new eqivalent
  1025.      `emodule-define' instead.
  1026.  
  1027. `ui-emotion-run'
  1028.      is an obsolete command.  Use its new eqivalent `emodule-start'
  1029.      instead.
  1030.  
  1031. `(ui-panel       PANELNAME  {on|off} [ WINDOW ] )'
  1032.      Do or don't display the given user-interface panel.
  1033.      Case is ignored in panel names.  Current PANELNAMEs are:
  1034.      *geomview*
  1035.           main panel
  1036.  
  1037.      *tools*
  1038.           motion controls
  1039.  
  1040.      *appearance*
  1041.           appearance controls
  1042.  
  1043.      *cameras*
  1044.           camera controls
  1045.  
  1046.      *lighting*
  1047.           lighting controls
  1048.  
  1049.      *obscure*
  1050.           obscure controls
  1051.  
  1052.      *materials*
  1053.           material properties controls
  1054.  
  1055.      *command*
  1056.           command entry box
  1057.  
  1058.      *credits*
  1059.           Geomview credits
  1060.  
  1061.  
  1062.      By default, the *Main* and *Tools* panels appear when
  1063.      Geomview starts.  If the optional Window is supplied, a
  1064.      `position' clause (e.g. `(ui-panel obscure on { position xmin
  1065.      xmax ymin ymax })' sets the panel's default position.  (Only
  1066.      xmin and ymin values are actually used.)  A present but empty
  1067.      Window, e.g.  `(ui-panel obscure on {})'" causes interactive
  1068.      positioning.
  1069.  
  1070. `(ui-target      ID [yes|no])'
  1071.      Set the target of user actions (the selected line of the
  1072.      target object browser) to ID.  The second argument specifies
  1073.      whether to make ID the current object regardless of its type.
  1074.      If `no', then ID becomes the current object of its type
  1075.      (geom or camera).  The default is `yes'.  This command may
  1076.      result in a change of motion modes based on target choice.
  1077.  
  1078. `(uninterest (COMMAND [ARGS]))'
  1079.      Undoes the effect of an `interest' command.  (COMMAND [ARGS]) must
  1080.      be identical to those used in the `interest' command.
  1081.  
  1082. `(update [timestep_in_seconds])'
  1083.      Apply each incremental motion once.  Uses timestep if it's present and
  1084.      nonzero; otherwise motions are proportional to elapsed real time.
  1085.  
  1086. `(update-draw    CAM-ID  [TIMESTEP])'
  1087.      Apply each incremental motion once and then draw CAM-ID.
  1088.      Applies TIMESTEP seconds' worth of motion, or uses elapsed real
  1089.      time if TIMESTEP is absent or zero.
  1090.  
  1091. `(window         CAM-ID  WINDOW)'
  1092.      Specify attributes for the window of CAM-ID, e.g. its size
  1093.      or initial position, in the OOGL Window syntax.
  1094.      The special CAM-ID `default' specifies
  1095.      properties of future windows (created by `camera' or
  1096.      `new-camera').
  1097.  
  1098. `(winenter       CAM-ID)'
  1099.      Tell Geomview that the mouse cursor is in the window
  1100.      of CAM-ID.  This function is for development purposes
  1101.      and is not intended for general use.
  1102.  
  1103. `(write {command,geometry,camera,transform,window} FILENAME [ID|(ID ...)] [self|world|universe|other ID])'
  1104.      write description of ID in given format to FILENAME.  Last
  1105.      parameter chooses coordinate system for geometry & transform:
  1106.      `self'
  1107.           just the object, no transformation or appearance (geometry only)
  1108.      `world'
  1109.           the object as positioned within the World.
  1110.      `universe'
  1111.           object's position in universal coordinates; includes Worldtransform
  1112.      `other ID: the object transformed to ID's coordinate system.'
  1113.  
  1114.      A filename of `-' is a special case: data are written to the
  1115.      stream from which the 'write' command was read.  For external
  1116.      modules, the data are sent to the module's standard input.
  1117.      For commands not read from an external program, `-' means
  1118.      Geomview's standard output.  (See also the `command'
  1119.      command.)
  1120.  
  1121.      The ID can either be a single id or a parenthesized list of
  1122.      ids, like `g0' or `(g2 g1 dodec.off)'.
  1123.  
  1124. `(write-sexpr     FILENAME LISPOBJECT)'
  1125.      Writes the given LISPOBJECT to FILENAME. This function is
  1126.      intended for internal debugging use only.
  1127.  
  1128. `(xform          ID TRANSFORM)'
  1129.      Concatenate TRANSFORM with the current transform of the object
  1130.      (apply TRANSFORM to object ID).
  1131.  
  1132. `(xform-incr     ID TRANSFORM)'
  1133.      Apply continual motion: concatenate TRANSFORM with the current
  1134.      transform of the object every refresh (set object ID's
  1135.      incremental transform to TRANSFORM).
  1136.  
  1137. `(xform-set      ID TRANSFORM)'
  1138.      Overwrite the current object transform with TRANSFORM (set
  1139.      object ID's transform to TRANSFORM).
  1140.  
  1141. `(zoom           CAM-ID FACTOR)'
  1142.      Zoom CAM-ID, multiplying its field of view by FACTOR.
  1143.      FACTOR should be a positive number.
  1144.  
  1145.  
  1146.  
  1147. 
  1148. File: geomview  Node: Non-Euclidean Geometry, Prev: Gcl Reference, Up: Top, Next: Mathematica
  1149.  
  1150. Non-Euclidean Geometry
  1151. **********************
  1152.  
  1153. Geomview supports hyperbolic and spherical geometry as well as
  1154. Euclidean geometry.  The three buttons at the bottom of the *Main*
  1155. panel are for setting the current geometry type.
  1156.  
  1157. In each of the three geometries, three models are supported:
  1158. *Virtual*, *Projective*, and *Conformal*.  You can
  1159. change the current model with the *Model* browser on the
  1160. *Camera* panel.  Each Geomview camera has its own model setting.
  1161.  
  1162. The default model is all three spaces is *Virtual*.  This
  1163. corresponds to the camera being in the same space as, and moving under
  1164. the same set of transformations as, the geometry itself.
  1165.  
  1166. In Euclidean space *Virtual* is the most useful model.
  1167. The other models were implemented for hyperbolic and spherical
  1168. spaces and just happen to work in Eucldiean space as well:
  1169. *Projective* is the same as *Virtual* but by default
  1170. displays the unit sphere, and *Conformal* displays everything
  1171. inverted in the unit sphere.
  1172.  
  1173. In hyperbolic space, the *Projective* model setting gives a view
  1174. of the projective ball model of hyperbolic 3-space imbedded in Euclidean
  1175. space.  The camera is initially outside the unit ball.  In this model,
  1176. the camera moves by Euclidean motions and geometry moves by hyperbolic
  1177. motions.  *Conformal* model is similar but shows the conformal
  1178. ball model instead. 
  1179.  
  1180. In spherical space, the *Projective* model gives a view of half
  1181. of the 3-sphere imbedded in Euclidean 3-space.  Spherical motions give
  1182. rise to projective transformations in the *Projective* model, and
  1183. to
  1184. Moebius
  1185. transformations in the *Conformal* model.  In both of these
  1186. models the camera moves by Euclidean motions.
  1187.  
  1188. In *Projective* and *Conformal* models, the unit sphere is
  1189. drawn by default.  You can turn it off and on at will using the
  1190. *Draw Sphere* button in the *Camera* panel.  In the
  1191. *Conformal* model, polygons and edges are subdivided as necessary
  1192. to make them look curved.  The parameters which determine this
  1193. subdivision can be set with the `set-conformal-refine' gcl command.
  1194.  
  1195. There are several sample hyperbolic space objects in the
  1196. `data/geom/hyperbolic' subdirectory of the Geomview directory
  1197. (`/u/gcg/ngrap/data/geom/hyperbolic' on the Geometry Center's
  1198. system).  Likewise, the subdirectory `data/geom/spherical'
  1199. contains several sample spherical space objects.
  1200.  
  1201. 
  1202. File: geomview  Node: Mathematica, Prev: Non-Euclidean Geometry, Up: Top, Next: OOGL.m
  1203.  
  1204. Mathematica Graphics in Geomview or RenderMan
  1205. *********************************************
  1206.  
  1207. Geomview comes with some Mathematica packages that let you use use
  1208. Geomview to display Mathematica graphics.  Mathematica is a commercial
  1209. mathematical software system available from Wolfram Research, Inc.
  1210.  
  1211. There are two ways to do this.
  1212.   1. Use Mathematica to write a graphics object to a file in OOGL format
  1213.      or in RIB format.
  1214.   2. Use Geomview as the default display for all 3D graphics output in
  1215.      Mathematica.
  1216. You can also use these packages to save Mathematica graphics in
  1217. RenderMan (RIB) format.
  1218.  
  1219. Since the format of Mathematica graphics objects is different from the
  1220. OOGL formats, both of these methods involve translating Mathematica
  1221. graphics to OOGL format.  Geomview is distributed with a Mathematica
  1222. package which does this translation.  Before doing either of the
  1223. above you must install this package.
  1224.  
  1225. * Menu:
  1226.  
  1227. * OOGL.m::        Generating OOGL files in Mathematica.
  1228. * Geomview.m::        Geomview as Mathematica's Default 3D Display.
  1229. * RenderMan::        Generating RenderMan files in Mathematica.
  1230. * Remote Display::    Using Geomview and Mathematica on different computers.
  1231. * Package Details::    Some details about the packages.
  1232. * Package Installation::  Installing the Mathematica->Geomview package.
  1233.  
  1234. 
  1235.